﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Media.Playlists;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.FileProperties;

// 기본 페이지 항목 템플릿에 대한 설명은 http://go.microsoft.com/fwlink/?LinkId=234237에 나와 있습니다.

namespace Hoons_Player.Kim
{
	/// <summary>
	/// 대부분의 응용 프로그램에 공통되는 특성을 제공하는 기본 페이지입니다.
	/// </summary>
	public sealed partial class MainPage : Hoons_Player.Common.LayoutAwarePage
	{
        // A pointer back to the main page.  This is needed if you want to call methods in MainPage such
        // as NotifyUser()
        //MainPage rootPage = MainPage.Current;

		public MainPage()
		{
			this.InitializeComponent();
		}

        async private void PickAudioButton_Click(object sender, RoutedEventArgs e)
        {
            // Make sure app is unsnapped before invoking the file picker
            if (!Constants.EnsureUnsnapped())
            {
                this.OutputStatus.Text = "Unable to unsap the app.";
                return;
            }

            FileOpenPicker picker = Constants.CreateFilePicker(Constants.audioExtensions);
            IReadOnlyList<StorageFile> files = await picker.PickMultipleFilesAsync();

            if (files != null && files.Count > 0)
            {
                this.OutputStatus.Text = "내용:\n";
                foreach (StorageFile file in files)
                {
                    MusicProperties properties = await file.Properties.GetMusicPropertiesAsync();
                    this.OutputStatus.Text += "\n";
                    this.OutputStatus.Text += "제목: " + properties.Title + "\n";
                    this.OutputStatus.Text += "앨범: " + properties.Album + "\n";
                    this.OutputStatus.Text += "아티스트: " + properties.Artist + "\n";
                }

                if (files[0] != null)
                {
                    const ThumbnailMode thumbnailMode = ThumbnailMode.MusicView;
                    const uint size = 100;
                    using (StorageItemThumbnail thumbnail = await files[0].GetThumbnailAsync(thumbnailMode, size))
                    {
                        // Also verify the type is ThumbnailType.Image (album art) instead of ThumbnailType.Icon
                        // (which may be returned as a fallback if the file does not provide album art)
                        if (thumbnail != null && thumbnail.Type == ThumbnailType.Image)
                        {
                            // Display the thumbnail
                            Constants.DisplayResult(ThumbnailImage, OutputStatus, thumbnailMode.ToString(), size, files[0], thumbnail, false);
                        }
                        else
                        {
                            //rootPage.NotifyUser(Errors.NoAlbumArt, NotifyType.StatusMessage);
                        }
                    }
                }
            }
            else
            {
                this.OutputStatus.Text = "No files picked.";
            }
        }

		/// <summary>
		/// 탐색 중 전달된 콘텐츠로 페이지를 채웁니다. 이전 세션의 페이지를
		/// 다시 만들 때 저장된 상태도 제공됩니다.
		/// </summary>
		/// <param name="navigationParameter">이 페이지가 처음 요청될 때
		/// <see cref="Frame.Navigate(Type, Object)"/>에 전달된 매개 변수 값입니다.
		/// </param>
		/// <param name="pageState">이전 세션 동안 이 페이지에 유지된
		/// 사전 상태입니다. 페이지를 처음 방문할 때는 이 값이 null입니다.</param>
		protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
		{
		}

		/// <summary>
		/// 응용 프로그램이 일시 중지되거나 탐색 캐시에서 페이지가 삭제된 경우
		/// 이 페이지와 관련된 상태를 유지합니다. 값은
		/// <see cref="SuspensionManager.SessionState"/>의 serialization 요구 사항을 만족해야 합니다.
		/// </summary>
		/// <param name="pageState">serializable 상태로 채워질 빈 사전입니다.</param>
		protected override void SaveState(Dictionary<String, Object> pageState)
		{
		}
	}
}
